package com.sky.service.user;

import com.sky.dto.*;
import com.sky.result.PageResult;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrderVO;

import java.time.LocalDateTime;

public interface OrderService {

    /**
     * 计算预计送达时间
     * @param shopId
     * @param addr
     * @return
     */
    LocalDateTime getEstimatedDeliveryTime(Long shopId,String addr);

    /**
     * 提交订单
     * @param dto
     * @return
     */
    OrderSubmitVO submit(OrdersSubmitDTO dto);

    /**
     * 用户下单成功,通知前端
     */
    void paySuccess(String num);

    /**
     * 用户催单
     */
    void toCompleteOrderFast(String num);

    /**
     * 查询历史订单
     * @param dto
     * @return
     */
    PageResult queryHistoryOrders(HistoryPageDTO dto);

    /**
     * 查看订单详情
     * @param orderId
     * @return
     */
    OrderVO queryOrderDetail(Long orderId);

    /**
     * 取消订单
     * @param
     */
    void cancelOrder(OrdersCancelDTO dto);


    /**
     * 再来一单
     * @param id
     */
    void oneMoreOrder(Long id);

    /**
     * 订单分页查询
     * @param dto
     * @return
     */
    PageResult pageQuery(OrdersPageQueryDTO dto);

    /**
     * 各状态订单数量统计
     * @return
     */
    OrderStatisticsVO orderStatusCount();

    /**
     * 拒绝订单
     * @param dto
     */
    void rejectOrder(OrdersRejectionDTO dto);
}
